home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / BASIC / GEMDOS.INC < prev    next >
Text File  |  2000-09-26  |  19KB  |  946 lines

  1. $INCLUDE "REGNAMES.INC"
  2. $STACK 2000
  3.  
  4. %GADGHNONE=1
  5. %GADGHCOMP=2
  6. %TOGGLESELECT=3
  7. %MENUGAD=4
  8. %STRGAD=5
  9. GemDOS$="GemDOS-V1.0"
  10. GemDir$=curdir$
  11.  
  12. on error goto gemdos.fehler
  13. goto gemdos.fertig
  14.  
  15. sub DrawPBorder(xo,yo,wo,ho,t$) static
  16.  x=xo*8-2  : w=wo*8
  17.  y=yo*16-4 : h=ho*16+4
  18.  line (x,y+h)-(x,y),15
  19.  line -(x+w,y),15
  20.  line (x+w,y+1)-(x+w,y+h),7
  21.  line -(x+1,y+h),7
  22.  locate yo+1,xo+3
  23.  if len(t$)<>1 then
  24.   color 15
  25.   print t$
  26.  else
  27.   reg %ax,&H09*256+asc(t$)
  28.   reg %bx,15
  29.   reg %cx,1
  30.   call interrupt &H10
  31.  end if
  32. end sub
  33.  
  34. sub AsciiPrint(c,t$) static
  35.  for i=1 to len(t$)
  36.   reg %ax,&H09*256+asc(mid$(t$,i,1))
  37.   reg %bx,c
  38.   reg %cx,1
  39.   call interrupt &H10
  40.   locate ,pos+1
  41.  next
  42. end sub
  43.  
  44. sub DrawNBorder(xo,yo,wo,ho,t$) static
  45.  x=xo*8-2  : w=wo*8
  46.  y=yo*16-4 : h=ho*16+4
  47.  line (x,y+h)-(x,y),7
  48.  line -(x+w,y),7
  49.  line (x+w,y+1)-(x+w,y+h),15
  50.  line -(x+1,y+h),15
  51.  locate yo+1,xo+3
  52.  color 15
  53.  print t$
  54. end sub
  55.  
  56. sub MouseOn static
  57.  reg %ax,&H0001
  58.  call interrupt &H33
  59. end sub
  60.  
  61. sub MouseOff static
  62.  reg %ax,&H0002
  63.  call interrupt &H33
  64. end sub
  65.  
  66. sub MouseDown shared
  67.  reg %ax,&H0005
  68.  reg %bx,0
  69.  call interrupt &H33
  70.  mouse.x=reg(%cx)
  71.  mouse.y=reg(%dx)
  72.  mouse.button=reg(%bx)
  73.  reg %ax,&H0006
  74.  reg %bx,0
  75.  call interrupt &H33
  76.  mouse.upbutton=reg(%bx)
  77. end sub
  78.  
  79. sub MouseUp shared
  80.  reg %ax,&H0006
  81.  reg %bx,0
  82.  call interrupt &H33
  83.  mouse.x=reg(%cx)
  84.  mouse.y=reg(%dx)
  85.  mouse.button=reg(%BX)
  86. end sub
  87.  
  88. sub MouseXY shared
  89.  reg %ax,&H0003
  90.  reg %bx,0
  91.  call interrupt &H33
  92.  mouse.x=reg(%cx)
  93.  mouse.y=reg(%dx)
  94. end sub
  95.  
  96. sub InitScreen(anz,t$) shared
  97.  reg %ax,&H1a00
  98.  call interrupt &H10
  99.  vga=reg(%ax)
  100.  vga=int(vga mod 256)
  101.  if vga<>&H1a then
  102.   print "Dieses Programm ben”tigt eine VGA-Grafikkarte!"
  103.   end
  104.  end if
  105.  
  106.  call CheckMouse
  107.  screen 12
  108.  
  109.  for i=0 to 15
  110.   palette i,i
  111.  next
  112.  
  113.  call LoadColors
  114.  call LoadMousePrefs
  115.  
  116.  reg %ax,0
  117.  call interrupt &H33
  118.  
  119.  call PrepareScreen(anz,t$)
  120.  exit sub
  121. end sub
  122.  
  123. sub LadeST static
  124. 8771 error 0
  125. 8772 open gemdir$+"signalton.dat" for input as #1
  126.  if erl=8772 then
  127.   signalton=0
  128.  else
  129.   signalton=asc(input$(1,1))
  130.   close #1
  131.  end if
  132. end sub
  133.  
  134. sub LoadMousePrefs static
  135. 7771 error 0
  136. 7772 open gemdir$+"maus.dat" for input as #1
  137.  if erl=7771 then
  138.   a=cvi(input$(2,1))
  139.   b=cvi(input$(2,1))
  140.   c=cvi(input$(2,1))
  141.   close #1
  142.  else
  143.   a=50
  144.   b=50
  145.   c=50
  146.  end if
  147.  
  148.  reg %ax,&H1a
  149.  reg %bx,a
  150.  reg %cx,b
  151.  reg %dx,c
  152.  call interrupt &H33
  153. end sub
  154.  
  155. sub LoadColors static
  156. 7777 error 0
  157. 7778 open gemdir$+"farben.dat" for input as #1
  158.  if erl<>7777 then
  159.   goto LoadColors.default
  160.  end if
  161.  
  162.  for i=0 to 15
  163.   r=asc(input$(1,1))
  164.   g=asc(input$(1,1))
  165.   b=asc(input$(1,1))
  166.   reg %ax,&H10*256+&H10
  167.   reg %bx,i
  168.   reg %cx,g*256+b
  169.   reg %dx,r*256
  170.   call interrupt &H10
  171.  next
  172.  close #1
  173.  exit sub
  174.  
  175. LoadColors.default:
  176.  reg %ax,&H10*256+&H10
  177.  reg %bx,0
  178.  reg %cx,16*256+48
  179.  reg %dx,16*256
  180.  call interrupt &H10
  181.  reg %ax,&H10*256+&H10
  182.  reg %bx,7
  183.  reg %cx,0
  184.  reg %dx,0
  185.  call interrupt &H10
  186.  reg %ax,&H10*256+&H10
  187.  reg %bx,15
  188.  reg %cx,&HFFFF
  189.  reg %dx,&HFF00
  190.  call interrupt &H10
  191. end sub
  192.  
  193. sub PrepareScreen(anz,t$) shared
  194.  for i=0 to 15
  195.   palette i,i
  196.  next
  197.  line (1,1)-(640,480),0,bf
  198.  dim gad.x1(anz),b.x1(anz)
  199.  dim gad.x2(anz),b.x2(anz)
  200.  dim gad.y1(anz),b.y1(anz)
  201.  dim gad.y2(anz),b.y2(anz)
  202.  dim gad.x(anz),b.x(anz)
  203.  dim gad.y(anz),b.y(anz)
  204.  dim gad.w(anz),b.w(anz)
  205.  dim gad.h(anz),b.h(anz)
  206.  dim gad.text$(anz),b.text$(anz)
  207.  dim gad.flags(anz),b.flags(anz)
  208.  dim gad.selected(anz),b.selected(anz)
  209.  dim gad.number(anz),b.number(anz)
  210.  dim gad.strmax(anz),b.strmax(anz)
  211.  gad.count=0
  212.  gad.max=anz
  213.  gad.id=-1
  214.  gad.num=-1
  215.  menu.num=-1
  216.  screen.title$=t$
  217.  call DrawPBorder(5,1,74,1,"")
  218.  call BoolGadget(1,1,3,1,"",33333)
  219.  call DrawPBorder(1,3,78,26,"")
  220.  call Center(5,screen.title$)
  221.  call LadeST
  222. end sub
  223.  
  224. sub MouseHandler shared
  225.  gad.id=-1
  226.  gad.num=-1
  227.  if gad.count>0 then
  228.   for i=0 to gad.count-1
  229.    if mouse.x>=gad.x1(i) and mouse.x<=gad.x2(i) then
  230.     if mouse.y>=gad.y1(i) and mouse.y<=gad.y2(i) then
  231.      gad.id=i
  232.      call GadgetHandler
  233.      exit sub
  234.     end if
  235.    end if
  236.   next
  237.  end if
  238. end sub
  239.  
  240. sub GadgetHandler shared
  241.  if gad.id=-1 then exit sub
  242.  if gad.flags(gad.id)=%GADGHCOMP then
  243.   call MouseOff
  244.   call DrawNBorder(gad.x(gad.id),gad.y(gad.id),gad.w(gad.id),gad.h(id),"")
  245.   call MouseOn
  246.   mouse.button=mouse.upbutton
  247.   while mouse.button=0
  248.    call MouseUp
  249.   wend
  250.   call MouseOff
  251.   call DrawPBorder(gad.x(gad.id),gad.y(gad.id),gad.w(gad.id),gad.h(id),"")
  252.   call MouseOn
  253.   i=gad.id
  254.   gad.id=-1
  255.   if mouse.x>=gad.x1(i) and mouse.x<=gad.x2(i) then
  256.     if mouse.y>=gad.y1(i) and mouse.y<=gad.y2(i) then
  257.      gad.id=i
  258.     end if
  259.   end if
  260.  elseif gad.flags(gad.id)=%MENUGAD or gad.flags(gad.id)=%GADGHNONE then
  261.   call MouseUp
  262.  elseif gad.flags(gad.id)=%TOGGLESELECT then
  263.   call MouseUp
  264.   call MouseOff
  265.   if gad.selected(gad.id)=0 then
  266.    call DrawPBorder(gad.x(gad.id),gad.y(gad.id),gad.w(gad.id),gad.h(gad.id),"")
  267.    gad.selected(gad.id)=1
  268.   else
  269.    call DrawNBorder(gad.x(gad.id),gad.y(gad.id),gad.w(gad.id),gad.h(gad.id),"")
  270.    gad.selected(gad.id)=0
  271.   end if
  272.   call MouseOn
  273.  end if
  274.  if gad.flags(gad.id)=%STRGAD then
  275.   key 25,chr$(0,&H53)
  276.   on key(12) gosub links
  277.   on key(13) gosub rechts
  278.   on key(25) gosub del.taste
  279.   key(12) on
  280.   key(13) on
  281.   key(25) on
  282.   sp=len(gad.text$(gad.id))
  283.   mx=gad.strmax(gad.id)
  284.   zz=mouse.x-gad.x1(gad.id)-8
  285.   if zz<0 then zz=0
  286.   zz=zz/8
  287.   if zz>sp then
  288.    cursor=sp
  289.   else
  290.    cursor=zz
  291.   end if
  292.   undo$=gad.text$(gad.id)
  293.   call Neu
  294.   i$=inkey$
  295.   call MouseDown
  296.   while i$<>chr$(13) and mouse.button=0
  297.    if i$<>"" then
  298.     select case i$
  299.      case chr$(8)
  300.       if sp>0 and cursor>0 then
  301.        q$=gad.text$(gad.id)
  302.        gad.text$(gad.id)=left$(q$,cursor-1)+mid$(q$,cursor+1,sp-cursor)
  303.        cursor=cursor-1
  304.        sp=sp-1
  305.        call Neu
  306.       else
  307.        call Audio(2000,1)
  308.       end if
  309.      case chr$(27)
  310.       gad.text$(gad.id)=undo$
  311.       sp=len(undo$)
  312.       call Neu
  313.      case else
  314.       if asc(i$)>30 then
  315.        if sp<mx then
  316.         q$=gad.text$(gad.id)
  317.         gad.text$(gad.id)=left$(q$,cursor)+i$+mid$(q$,cursor+1,sp-cursor)
  318.         sp=sp+1 : cursor=cursor+1
  319.         call Neu
  320.        else
  321.         call Audio(2000,1)
  322.        end if
  323.       else
  324.        call Audio(2000,1)
  325.       end if
  326.     end select
  327.    end if
  328.    i$=inkey$
  329.    call MouseDown
  330.   wend
  331.   cursor=33333
  332.   call Neu
  333.   key(12) off
  334.   key(13) off
  335.   key(25) off
  336.   gad.num=gad.id
  337.  end if
  338.  if gad.id<>-1 then
  339.   gad.num=gad.number(gad.id)
  340.  end if
  341. end sub
  342.  
  343. links:
  344.  if cursor>0 then
  345.   cursor=cursor-1
  346.   call Neu
  347.  end if
  348. return
  349.  
  350. rechts:
  351.  if cursor<sp then
  352.   cursor=cursor+1
  353.   call Neu
  354.  end if
  355. return
  356.  
  357. del.taste:
  358.  if cursor<sp and sp>0 then
  359.   q$=gad.text$(gad.id)
  360.   gad.text$(gad.id)=left$(q$,cursor)+mid$(q$,cursor+2,sp-cursor)
  361.   sp=sp-1
  362.   if cursor>sp then cursor=cursor-1
  363.   call Neu
  364.  end if
  365. return
  366.  
  367. sub Neu shared
  368.  call MouseOff
  369.  locate gad.y(gad.id)+1,gad.x(gad.id)+2
  370.  color 15
  371.  z$=gad.text$(gad.id)+string$(1+gad.strmax(gad.id)-len(gad.text$(gad.id))," ")
  372.  print z$;
  373.  if cursor<33333 then
  374.   color 14
  375.   locate gad.y(gad.id)+1,gad.x(gad.id)+2+cursor
  376.   z$=mid$(z$,cursor+1,1)
  377.   if z$=" " then z$="_"
  378.   print z$;
  379.  end if
  380.  call MouseOn
  381. end sub
  382.  
  383. sub BoolGadget(x,y,w,h,text$,id) shared
  384.  if gad.count>=gad.max then exit sub
  385.  gad.x(gad.count)=x
  386.  gad.y(gad.count)=y
  387.  gad.w(gad.count)=w
  388.  gad.h(gad.count)=h
  389.  gad.x1(gad.count)=x*8-2
  390.  gad.y1(gad.count)=y*16-6
  391.  gad.x2(gad.count)=gad.x1(gad.count)+(w*8)
  392.  gad.y2(gad.count)=gad.y1(gad.count)+(h*16)+4
  393.  gad.text$(gad.count)=text$
  394.  gad.flags(gad.count)=%GADGHCOMP
  395.  gad.selected(gad.count)=0
  396.  gad.number(gad.count)=id
  397.  gad.count=gad.count+1
  398.  call DrawPBorder(x,y,w,h,text$)
  399. end sub
  400.  
  401. sub StrGadget(x,y,w,h,text$,mx,id) shared
  402.  if gad.count>=gad.max then exit sub
  403.  gad.x(gad.count)=x
  404.  gad.y(gad.count)=y
  405.  gad.w(gad.count)=w
  406.  gad.h(gad.count)=h
  407.  gad.x1(gad.count)=x*8-2
  408.  gad.y1(gad.count)=y*16-6
  409.  gad.x2(gad.count)=gad.x1(gad.count)+(w*8)
  410.  gad.y2(gad.count)=gad.y1(gad.count)+(h*16)+4
  411.  gad.text$(gad.count)=text$
  412.  gad.flags(gad.count)=%STRGAD
  413.  gad.selected(gad.count)=0
  414.  gad.number(gad.count)=id
  415.  gad.strmax(gad.count)=mx
  416.  gad.count=gad.count+1
  417.  call DrawNBorder(x,y,w,h,"")
  418.  color 15
  419.  locate y+1,x+2
  420.  print text$
  421. end sub
  422.  
  423. sub MinGadget(x,y,w,h,id) shared
  424.  if gad.count>=gad.max then exit sub
  425.  gad.x(gad.count)=x
  426.  gad.y(gad.count)=y
  427.  gad.w(gad.count)=w
  428.  gad.h(gad.count)=h
  429.  gad.x1(gad.count)=x*8-2
  430.  gad.y1(gad.count)=y*16-6
  431.  gad.x2(gad.count)=gad.x1(gad.count)+(w*8)
  432.  gad.y2(gad.count)=gad.y1(gad.count)+(h*16)+4
  433.  gad.text$(gad.count)=text$
  434.  gad.flags(gad.count)=%GADGHNONE
  435.  gad.selected(gad.count)=0
  436.  gad.number(gad.count)=id
  437.  gad.count=gad.count+1
  438. end sub
  439.  
  440. sub ToggleGadget(x,y,w,h,text$,selected,id) shared
  441.  if gad.count>=gad.max then exit sub
  442.  gad.x(gad.count)=x
  443.  gad.y(gad.count)=y
  444.  gad.w(gad.count)=w
  445.  gad.h(gad.count)=h
  446.  gad.x1(gad.count)=x*8-2
  447.  gad.y1(gad.count)=y*16-6
  448.  gad.x2(gad.count)=gad.x1(gad.count)+(w*8)
  449.  gad.y2(gad.count)=gad.y1(gad.count)+(h*16)+4
  450.  gad.text$(gad.count)=text$
  451.  gad.flags(gad.count)=%TOGGLESELECT
  452.  gad.selected(gad.count)=selected
  453.  gad.number(gad.count)=id
  454.  gad.count=gad.count+1
  455.  if selected=0 then
  456.   call DrawNBorder(x,y,w,h,text$)
  457.  else
  458.   call DrawPBorder(x,y,w,h,text$)
  459.  end if
  460. end sub
  461.  
  462. function GetGadgetID(number) shared
  463.  for i=0 to gad.count-1
  464.   if gad.number(i)=number then
  465.    GetGadgetID=i
  466.    exit function
  467.   end if
  468.  next
  469. end function
  470.  
  471. sub RemoveGadget(number) shared
  472.  call MouseOff
  473.  num=GetGadgetID(number)
  474.  if num=-1 then exit sub
  475.  if gad.flags(num)<>%MENUGAD then
  476.   line (gad.x1(num),gad.y1(num))-(gad.x2(num)+1,gad.y2(num)+2),0,bf
  477.  else
  478.   locate gad.y(num)+1,gad.x(num)+1
  479.   color 0
  480.   print gad.text$(num)
  481.  end if
  482.  call MouseOn
  483.  if gad.count<gad.max then
  484.   for i=num to gad.max-1
  485.    gad.x1(i)=gad.x1(i+1)
  486.    gad.x2(i)=gad.x2(i+1)
  487.    gad.y1(i)=gad.y1(i+1)
  488.    gad.y2(i)=gad.y2(i+1)
  489.    gad.x(i)=gad.x(i+1)
  490.    gad.y(i)=gad.y(i+1)
  491.    gad.w(i)=gad.w(i+1)
  492.    gad.h(i)=gad.h(i+1)
  493.    gad.text$(i)=gad.text$(i+1)
  494.    gad.flags(i)=gad.flags(i+1)
  495.    gad.selected(i)=gad.selected(i+1)
  496.    gad.number(i)=gad.number(i+1)
  497.    gad.strmax(i)=gad.strmax(i+1)
  498.   next
  499.  end if
  500.  gad.count=gad.count-1
  501. end sub
  502.  
  503. function GetGadgetText$(number) shared
  504.  num=GetGadgetID(number)
  505.  if num=-1 then
  506.   GetGadgetText$=""
  507.  else
  508.   GetGadgetText$=gad.text$(num)
  509.  end if
  510. end function
  511.  
  512. sub MenuGadget(x,text$,id) shared
  513.  if gad.count>=gad.max then exit sub
  514.  y=1
  515.  h=1
  516.  w=len(text$)
  517.  gad.x(gad.count)=x
  518.  gad.y(gad.count)=y
  519.  gad.w(gad.count)=w
  520.  gad.h(gad.count)=h
  521.  gad.x1(gad.count)=x*8-2
  522.  gad.y1(gad.count)=y*16-6
  523.  gad.x2(gad.count)=gad.x1(gad.count)+(w*8)
  524.  gad.y2(gad.count)=gad.y1(gad.count)+(h*16)+4
  525.  gad.text$(gad.count)=text$
  526.  gad.flags(gad.count)=%MENUGAD
  527.  gad.selected(gad.count)=0
  528.  gad.number(gad.count)=id
  529.  gad.count=gad.count+1
  530.  locate y+1,x+1
  531.  print text$
  532. end sub
  533.  
  534. sub MenuHandler(x,w,feld$(),anz) shared
  535.  ax1=x*8
  536.  ay1=30
  537.  ax2=ax1+w
  538.  ay2=ay1+(anz*16)+8
  539.  size=6+(ay2-ay1+1)*2*int((ax2-ax1+16)/16)*4
  540.  dos.fehler=0
  541.  free=fre(-1)
  542.  dim backup%(size)
  543.  if dos.fehler<>0 then call Crash(free,size*2)
  544.  call MouseOff
  545.  get (ax1,ay1)-(ax2,ay2),backup%
  546.  line (ax1,ay1)-(ax2,ay2),0,bf
  547.  line (ax1,ay2)-(ax1,ay1),15
  548.  line -(ax2,ay1),15
  549.  line (ax1+1,ay2)-(ax2,ay2),7
  550.  line -(ax2,ay1+1),7
  551.  color 15
  552.  for i=0 to anz-1
  553.   if feld$(i)="-" then
  554.    ty=(3+i)*16-8
  555.    line (ax1+1,ty)-(ax2-1,ty),15
  556.   elseif right$(feld$(i),1)=chr$(0) then
  557.    color 3
  558.    locate 3+i,x+3
  559.    print feld$(i)
  560.   else
  561.    color 15
  562.    locate 3+i,x+3
  563.    print feld$(i)
  564.   end if
  565.  next
  566.  call MouseOn
  567.  
  568.  of=-1
  569.  call MouseDown
  570.  while mouse.button=0
  571.   call MouseXY
  572.   if mouse.x>ax1 and mouse.x<ax2 then
  573.    y=int(mouse.y/16)+1
  574.    if y>=3 and y<3+anz then
  575.     if of<>y-3 then
  576.      if of<>-1 then
  577.       call MouseOff
  578.       color 15
  579.       locate oy,ox
  580.       print feld$(of)
  581.       call MouseOn
  582.      end if
  583.      if feld$(y-3)<>"-" and right$(feld$(y-3),1)<>chr$(0) then
  584.       oy=y
  585.       ox=x+3
  586.       of=y-3
  587.       call MouseOff
  588.       color 14
  589.       locate oy,ox
  590.       print feld$(of)
  591.       call MouseOn
  592.      else
  593.       of=-1
  594.      end if
  595.      call MouseOn
  596.     end if
  597.    else
  598.     if of<>-1 then
  599.      call MouseOff
  600.      color 15
  601.      locate oy,ox
  602.      print feld$(of)
  603.      call MouseOn
  604.      of=-1
  605.     end if
  606.    end if
  607.   end if
  608.   call MouseDown
  609.  wend
  610.  y=int(mouse.y/16)+1
  611.  menu.num=-1
  612.  if y>=3 and y<3+anz and mouse.x>ax1 and mouse.x<ax2 then
  613.   if feld$(y-3)<>"-" and right$(feld$(y-3),1)<>chr$(0) then
  614.    menu.num=y-3
  615.    if mid$(feld$(menu.num),1,1)=" " then
  616.     mid$(feld$(menu.num),1,1)=chr$(251)
  617.    elseif mid$(feld$(menu.num),1,1)=chr$(251) then
  618.     mid$(feld$(menu.num),1,1)=" "
  619.    end if
  620.   end if
  621.  end if
  622.  
  623.  call MouseOff
  624.  put (ax1,ay1),backup%,pset
  625.  erase backup%
  626.  color 15
  627.  call MouseOn
  628. end sub
  629.  
  630. function ToggleMenuStatus(titel$) static
  631.  if mid$(titel$,1,1)=" " then
  632.   ToggleMenuStatus=0
  633.  elseif mid$(titel$,1,1)=chr$(251) then
  634.   ToggleMenuStatus=1
  635.  else
  636.   ToggleMenuStatus=-1
  637.  end if
  638. end function
  639.  
  640. sub SetToggleMenu(titel$,onoff) static
  641.  if onoff=1 then c$=chr$(251) else c$=" "
  642.  mid$(titel$,1,1)=c$
  643. end sub
  644.  
  645. sub ItemOn(titel$) static
  646.  if right$(titel$,1)=chr$(0) then
  647.   mid$(titel$,len(titel$),1)=" "
  648.  end if
  649. end sub
  650.  
  651. sub ItemOff(titel$) static
  652.  if right$(titel$,1)<>chr$(0) then
  653.   titel$=titel$+chr$(0)
  654.  elseif right$(titel$,1)=" " then
  655.   mid$(titel$,len(titel$),1)=chr$(0)
  656.  end if
  657. end sub
  658.  
  659. sub BackupMenu shared
  660.  dim title%(639*34/2)
  661.  call MouseOff
  662.  get (1,1)-(639,34),title%
  663.  call MouseOn
  664. end sub
  665.  
  666. sub RestoreMenu shared
  667.  put (1,1),title%,pset
  668.  erase title%
  669.  call Center(5,screen.title$)
  670. end sub
  671.  
  672. sub RefreshGadgets shared
  673.  call MouseOff
  674.  line (0,35)-(640,480),0,bf
  675.  call DrawPBorder(1,3,78,26,"")
  676.  for i=0 to gad.count-1
  677.   if gad.flags(i)=%GADGHCOMP then
  678.    call DrawPBorder(gad.x(i),gad.y(i),gad.w(i),gad.h(i),gad.text$(i))
  679.   elseif gad.flags(i)=%TOGGLESELECT then
  680.    if gad.selected(i)=1 then
  681.     call DrawPBorder(gad.x(i),gad.y(i),gad.w(i),gad.h(i),gad.text$(i))
  682.    else
  683.     call DrawNBorder(gad.x(i),gad.y(i),gad.w(i),gad.h(i),gad.text$(i))
  684.    end if
  685.   end if
  686.  next
  687.  call MouseOn
  688. end sub
  689.  
  690. sub CheckMouse static
  691.  test=xMouseExist
  692.  if test=0 then
  693.   call Bell
  694.   print "Fehler: Maustreiber ist nicht vorhanden!"
  695.   print ""
  696.   end
  697.  end if
  698. end sub
  699.  
  700. function xMouseExist public
  701.  def seg = 0
  702.  mouseseg& = peek(206)+256*peek(207)
  703.  mouseofs& = peek(204)+256*peek(205)
  704.  def seg = mouseseg&
  705.  
  706.  if (mouseseg& = 0 and mouseofs& = 0) or peek(mouseofs&) = 207 then
  707.   xMouseExist=0
  708.  else
  709.   xMouseExist=1
  710.  end if
  711.  def seg
  712. end function
  713.  
  714. sub Center(y,t$) static
  715.  locate y,(80-len(t$))/2
  716.  print t$
  717. end sub
  718.  
  719. sub CleanUp shared
  720.  call MouseOff
  721.  reg %ax,0
  722.  call interrupt &H33
  723.  screen 0
  724.  cls
  725. end sub
  726.  
  727. sub LoadApp(appName$) static
  728.  shared GemDOS$
  729.  
  730.  call MouseOff
  731.  call BackupMenu
  732.  
  733.  x$=appName$+" "+GemDOS$
  734.  locate 4,5
  735.  shell x$
  736.  for i=0 to 15
  737.   palette i,i
  738.  next
  739.  
  740.  call RefreshGadgets
  741.  call RestoreMenu
  742.  call MouseUp
  743.  call MouseDown
  744.  call MouseOn
  745. end sub
  746.  
  747. sub LoadNonApp(prgName$,xwait) static
  748.  call MouseOff
  749.  call BackupMenu
  750.  dim c(15)
  751.  dim d(15)
  752.  for i=0 to 15
  753.   reg %ax,&H10*256+&H15
  754.   reg %bx,i
  755.   call interrupt &H10
  756.   c(i)=reg(%cx)
  757.   d(i)=reg(%dx)
  758.  next
  759.  
  760.  screen 0
  761.  cls
  762.  shell prgName$
  763.  if x=1 then
  764.   color 15
  765.   print ""
  766.   print ""
  767.   print ""
  768.   print "Drcken Sie eine beliebige Taste, um zum Anwendungsprogramm zurckzukehren."
  769.   while inkey$="":wend
  770.  end if
  771.  
  772.  screen 12
  773.  cls
  774.  for i=0 to 15
  775.   palette i,i
  776.  next
  777.  line (1,1)-(640,480),0,bf
  778.  for i=0 to 15
  779.   reg %ax,&H10*256+&H10
  780.   reg %bx,i
  781.   reg %cx,c(i)
  782.   reg %dx,d(i)
  783.   call interrupt &H10
  784.  next
  785.  call RefreshGadgets
  786.  call RestoreMenu
  787.  call MouseUp
  788.  call MouseDown
  789.  call MouseOn
  790.  erase c,d
  791. end sub
  792.  
  793. gemdos.fehler:
  794.  dos.fehler=err
  795.  dos.fzeile=erl
  796. resume next
  797.  
  798. sub NewWindow(x1,y1,w1,h1,mousetrap) shared
  799.  x=x1*8-4
  800.  y=y1*16-8
  801.  w=w1*8+8
  802.  h=h1*16+16
  803.  xx=x+w
  804.  yy=y+h
  805.  dos.fehler=0
  806.  free=fre(-1)
  807.  size=6+(yy-y+1)*2*int((xx-x+16)/16)*4
  808.  dim dynamic win%(size)
  809.  if dos.fehler<>0 then call Crash(free,size*2)
  810.  call MouseOff
  811.  get (x,y)-(xx,yy),win%
  812.  win.x=x
  813.  win.y=y
  814.  win.w=w1
  815.  win.l=x1
  816.  line (x,y)-(x+w,y+h),0,bf
  817.  line (x+1,y+h-2)-(x+1,y+1),15
  818.  line -(x+w-2,y+1),15
  819.  line (x+2,y+h-2)-(x+w-2,y+h-2),7
  820.  line -(x+w-2,y+2),7
  821.  if mousetrap=1 then
  822.   reg %ax,&H7
  823.   reg %cx,x+2
  824.   reg %dx,x+w-14
  825.   call interrupt &H33
  826.   reg %ax,&H8
  827.   reg %cx,y+2
  828.   reg %dx,y+h-20
  829.   call interrupt &H33
  830.   reg %ax,&H4
  831.   reg %cx,x+32
  832.   reg %dx,y+16
  833.   call interrupt &H33
  834.   win.gads=gad.count
  835.   for anz=0 to gad.count-1
  836.    b.x1(anz)=gad.x1(anz)
  837.    b.x2(anz)=gad.x2(anz)
  838.    b.y1(anz)=gad.y1(anz)
  839.    b.y2(anz)=gad.y2(anz)
  840.    b.x(anz)=gad.x(anz)
  841.    b.y(anz)=gad.y(anz)
  842.    b.w(anz)=gad.w(anz)
  843.    b.h(anz)=gad.h(anz)
  844.    b.text$(anz)=gad.text$(anz)
  845.    b.flags(anz)=gad.flags(anz)
  846.    b.selected(anz)=gad.selected(anz)
  847.    b.number(anz)=gad.number(anz)
  848.    b.strmax(anz)=gad.strmax(anz)
  849.   next
  850.   gad.count=0
  851.   win.mousetrap=1
  852.  else
  853.   win.mousetrap=0
  854.  end if
  855.  call MouseOn
  856. end sub
  857.  
  858. sub CloseWindow shared
  859.  call MouseOff
  860.  put (win.x,win.y),win%,pset
  861.  erase win%
  862.  if win.mousetrap=1 then
  863.   reg %ax,&H7
  864.   reg %cx,0
  865.   reg %dx,640
  866.   call interrupt &H33
  867.   reg %ax,&H8
  868.   reg %cx,0
  869.   reg %dx,480
  870.   call interrupt &H33
  871.   gad.count=win.gads
  872.   for anz=0 to win.gads-1
  873.    gad.x1(anz)=b.x1(anz)
  874.    gad.x2(anz)=b.x2(anz)
  875.    gad.y1(anz)=b.y1(anz)
  876.    gad.y2(anz)=b.y2(anz)
  877.    gad.x(anz)=b.x(anz)
  878.    gad.y(anz)=b.y(anz)
  879.    gad.w(anz)=b.w(anz)
  880.    gad.h(anz)=b.h(anz)
  881.    gad.text$(anz)=b.text$(anz)
  882.    gad.flags(anz)=b.flags(anz)
  883.    gad.selected(anz)=b.selected(anz)
  884.    gad.number(anz)=b.number(anz)
  885.    gad.strmax(anz)=b.strmax(anz)
  886.   next
  887.  end if
  888.  call MouseOn
  889. end sub
  890.  
  891. sub WaitForClick shared
  892.  call MouseDown
  893.  while mouse.button=0
  894.   call MouseDown
  895.  wend
  896.  call MouseUp
  897.  while mouse.button=0
  898.   call MouseUp
  899.  wend
  900. end sub
  901.  
  902. sub CenterInWindow(y,t$) shared
  903.  locate y,1+win.l+((win.w-len(t$))/2)
  904.  print t$
  905. end sub
  906.  
  907. sub InformationBox(t$,c1$,c2$,c3$) shared
  908.  call NewWindow(15,12,50,7,0)
  909.  call MouseOff
  910.  color 15
  911.  call CenterInWindow(13,t$)
  912.  call CenterInWindow(15,c1$)
  913.  call CenterInWindow(16,c2$)
  914.  call CenterInWindow(17,c3$)
  915.  call CenterInWindow(19,"Freier Speicher:"+str$(int(fre(-1)/1024))+" KBytes")
  916.  call MouseOn
  917.  call WaitForClick
  918.  call CloseWindow
  919. end sub
  920.  
  921. sub Bell static
  922.  if signalton=0 then beep
  923. end sub
  924.  
  925. sub Audio(freq,dauer) static
  926.  if signalton=0 then sound freq,dauer
  927. end sub
  928.  
  929. sub Crash(free,required) static
  930.  screen 0
  931.  color 14
  932.  print "Vorhandener Speicher:";free;" Bytes"
  933.  print "Ben”tigter Speicher: ";required;" Bytes"
  934.  print ""
  935.  print "Differenz:           ";required-free;" Bytes"
  936.  print ""
  937.  print "Die Ausfhrung des Anwendungsprogramms muáte abgebrochen werden, weil"
  938.  print "nicht mehr genug freier Speicher verfgbar war!"
  939.  call Bell
  940.  end
  941. end sub
  942.  
  943.  
  944.  
  945. gemdos.fertig:
  946.